package com.example.jdbc;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class JDBC {
    /**
     * 协议
     */
    public static String protocol="jdbc";
    /**
     * 子协议
     */
    public static String childProtocol="mysql";
    /**
     * IP地址
     */
    public static String ip="localhost";
    /**
     * 端口
     */
    public static String port="3306";
    /**
     * 资源名（此处的资源名为数据库名）
     */
    public static String dataBaseName="test";
    /**
     * 数据的数据库
     */
    public static String dataBaseUrl="localhost:3306/test?";
    /**
     * 时区
     */
    public static String timeZone="serverTimezone=UTC";
    /**
     * Unicode字符集编码
     * 如果characterEncoding设置为gb2312或GBK，本参数必须设置为true 。
     */
    public static String unicode="useUnicode=true";
    /**
     * characterEncoding字符编码方式
     * gb2312
     * gbk
     */
    public static String characterEncoding="characterEncoding=gbk";
    /**
     * 数据库地址
     */
    public static String url=protocol+":"+childProtocol+":"+"//"+ip+":"+port+"/"+dataBaseName+"?"+timeZone;
    /**
     * 数据库用户名
     */
    public static String userName="root";
    /**
     * 数据库密码
     */
    public static String passWord="root";


    public static void main(String[] args) {

        //连接
        Connection connection = null;
        //操作对象
        PreparedStatement preparedStatement = null;
        //查询结果
        ResultSet resultSet = null;


        try {
            //注册驱动
            Driver driver=new com.mysql.cj.jdbc.Driver();
            DriverManager.registerDriver(driver);
            //第一个Driver是接口，第二个Driver是实现类

//            此处的两行代码也可用如下代码代替：
//            {
//                 加载 MySQL 驱动
//                Class.forName("com.mysql.cj.jdbc.Driver");
//            }



            //获取链接
            connection=DriverManager.getConnection(url,userName,passWord);


            //获取数据库操作对象
            String sql = "select * from user where no=1";
            preparedStatement = connection.prepareStatement(sql);
//            preparedStatement.setInt(1,1026);


            //执行SQL

            resultSet=preparedStatement.executeQuery();

//            //处理查询结果集 通过标识
//            if (resultSet.next()){
//                System.out.println("查询成功，查询结果如下：");
//                System.out.print("学号为："+resultSet.getInt(1));
////                System.out.print("  姓名为："+resultSet.getInt(2));//err
//                System.out.print("  姓名为："+resultSet.getString(2));//String
//                System.out.print("  分数为："+resultSet.getInt(3));//89
//                System.out.print("  分数为："+resultSet.getDouble(3));//89.99
//                System.out.print("  布尔值为："+resultSet.getInt(4));//1 0
//                System.out.print("  布尔值为："+resultSet.getBoolean(4));//true false
//            }

            //处理查询结果集 通过字段
            if (resultSet.next()){
                System.out.println("查询成功，查询结果如下：");
                System.out.print("学号为："+resultSet.getString("no"));
                System.out.print("  姓名为："+resultSet.getString("name"));
                System.out.print("  分数为："+resultSet.getString("score"));
                System.out.print("  布尔值为："+resultSet.getString("score"));
            }

        }
        catch (SQLException e){
            e.printStackTrace();
        }
//        catch (Exception e){
//            System.out.println("xxxx");
//        }
        finally {
            //6.释放资源，try中的变量无法在finally中使用，关闭资源需从小到大依次关闭
            //关闭resultSet
            try {
                if (resultSet != null) {
                    resultSet.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            //关闭preparedStatement
            try {
                if (preparedStatement != null) {
                    preparedStatement.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
            //关闭connection
            try {
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
